package com.cskaoyan.javase.homework.day06.stage2;

import java.util.Arrays;
import java.util.Scanner;

/**
 * @description: 如何避免空指针异常
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 调用方法如果调用者是null 会产生空指针异常
 * 这个时候 为了避免空指针，最好它的调用者永远不是null
 *
 */

public class Problem2 {

    public static void main(String[] args) {

        String[] arr = new String[10];
        arr[0] = "123";
        arr[1] = "456";
        arr[2] = "789";
        System.out.println("修改前：" + Arrays.toString(arr));
        updateStudent(arr);
        System.out.println("修改后：" + Arrays.toString(arr));

        //equals方法具有对称性,A和B比较,B和A比较是一样的
        //在开发中经常操作字符串,所以equals方法很常用,利用对称性去规避空指针异常是常见的做法
        //"".eq
        //System.out.println("".equals(null));
    }

    public static void updateStudent(String[] studs) {
        //接收键盘录入，修改学生信息
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要修改的学生信息：");
        String target = sc.nextLine();
        //遍历String数组，找到该学生信息
        for (int i = 0; i < studs.length; i++) {
            //if (studs[i] == null) continue;
            //避免空指针异常：尽量使用不可能等于null的引用去调用方法
            //判断一个字符串是否是绝对空字符串
            /*String str = "xxx";
            //尽量采取这种方式
            if ("".equals(str))*/
            if (target.equals(studs[i])) {
                //找到需要修改的学生信息
                //键盘接收需要改成的取值
                System.out.println("已找到该学生！");
                System.out.println("请输入要修改成的学生信息：");
                String s = sc.nextLine();
                studs[i] = s;
                System.out.println("修改成功！");
                return;
            }
        }
        //执行完for循环没有结束方法，表示没有该学生信息
        System.out.println("无此学生！");
    }
}